/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package bolao.ui.beans;

import bolao.dominio.seguranca.Usuario;
import bolao.exception.LoginException;
import bolao.service.SecurityService;
import bolao.service.SetupDataService;
import bolao.util.JsfUtil;
import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 *
 * @author 
 */
@ManagedBean
@RequestScoped
public class LoginJsfBean {

    @EJB
    private SecurityService securityService;
    private Usuario usuarioLogado;
    private String username;
    private String senha;

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getSenha() {
        return senha;
    }

    public void setSenha(String senha) {
        this.senha = senha;
    }
    
    private static final Logger log = LoggerFactory.getLogger(LoginJsfBean.class);

    public String doLogin() {
        try {
            usuarioLogado = securityService.login(username, senha);
            JsfUtil.setSessionVal(Constants.USUARIO_LOGADO_SESSION_VAR, usuarioLogado);
            UsuarioLogadoJsfBean usuarioLogadoJsfBean = JsfUtil.getJsfBean(UsuarioLogadoJsfBean.class, "#{usuarioLogadoJsfBean}");
            usuarioLogadoJsfBean.setUsuarioLogado(usuarioLogado);
            // A página a ser chamada após o login bem sucedido deveria
            // ser obtida externamente, e não estar hard-coded, como abaixo.
            return "list_item.xhtml?faces-redirect=true";
        } catch (LoginException e) {
            JsfUtil.error(e.getMessage());
            log.error("Falha na tentativa de login de \"" + username + "\" -> " + e.getMessage() + "(" + e.getClass().getName() + ")", e);
            return null;
        }        
    }

    @PostConstruct
    public void init() {
        JsfUtil.setSessionVal(Constants.USUARIO_LOGADO_SESSION_VAR, null);
        JsfUtil.getEC().invalidateSession();
        setupDataService.setupData();
    }

    public Usuario getUsuarioLogado() {
        log.debug("######## Entrou em getUsuarioLogado()");
        return (Usuario) JsfUtil.getSessionVal(Constants.USUARIO_LOGADO_SESSION_VAR);
    }

    @EJB
    private SetupDataService setupDataService;

}
